import * as XLSX from 'xlsx';

/**
 * Excel导出工具
 * 用于将表格数据导出为Excel文件
 */

/**
 * 导出数据为Excel
 * @param {Array} data - 要导出的数据数组
 * @param {Array} columns - 表格列配置
 * @param {string} filename - 文件名（不含扩展名）
 */
export const exportToExcel = (data, columns, filename) => {
  if (!data || data.length === 0) {
    console.warn('没有数据可导出');
    return;
  }
  
  // 过滤不需要导出的列（如操作列）
  const filteredColumns = columns.filter(col => {
    // 排除操作列
    if (col.key === 'action' || col.title === '操作') {
      return false;
    }
    return true;
  });
  
  // 构建表头和数据
  const headers = {};
  filteredColumns.forEach(col => {
    if (col.dataIndex || col.key) {
      const key = col.dataIndex || col.key;
      headers[key] = col.title || key;
    }
  });
  
  // 提取数据
  const rows = data.map((item) => {
    const row = {};
    filteredColumns.forEach(col => {
      if (col.dataIndex || col.key) {
        const key = col.dataIndex || col.key;
        let value = item[key];
        
        // 处理不同类型的值
        if (value === null || value === undefined) {
          value = '';
        } else if (typeof value === 'object' && !Array.isArray(value)) {
          // 如果是对象，尝试提取有用的字段或转换为字符串
          if (value.text !== undefined) {
            value = value.text;
          } else if (value.type !== undefined) {
            value = value.type;
          } else {
            value = JSON.stringify(value);
          }
        } else if (Array.isArray(value)) {
          value = value.join(', ');
        }
        
        row[headers[key] || key] = value;
      }
    });
    return row;
  });
  
  // 创建worksheet
  const worksheet = XLSX.utils.json_to_sheet(rows);
  
  // 设置列宽
  const colKeys = Object.keys(headers);
  const colWidths = colKeys.map(() => ({ wch: 15 }));
  worksheet['!cols'] = colWidths;
  
  // 创建workbook
  const workbook = XLSX.utils.book_new();
  XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
  
  // 保存文件
  const excelFilename = filename || `export_${new Date().getTime()}.xlsx`;
  XLSX.writeFile(workbook, excelFilename);
};

/**
 * 导出简单数据（直接使用对象数组）
 * @param {Array} data - 要导出的数据数组
 * @param {string} filename - 文件名
 */
export const exportSimpleData = (data, filename) => {
  if (!data || data.length === 0) {
    console.warn('没有数据可导出');
    return;
  }
  
  // 创建worksheet
  const worksheet = XLSX.utils.json_to_sheet(data);
  
  // 设置列宽
  const headers = Object.keys(data[0]);
  const colWidths = headers.map(() => ({ wch: 15 }));
  worksheet['!cols'] = colWidths;
  
  // 创建workbook
  const workbook = XLSX.utils.book_new();
  XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
  
  // 保存文件
  const excelFilename = filename || `export_${new Date().getTime()}.xlsx`;
  XLSX.writeFile(workbook, excelFilename);
};

